﻿using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;

namespace Battle
{
// Додатково введенний клас прямокутник для полегшення обробки данних кораблів
    public class Rectangle
    {
        private int _width;
        private int _height;

        public Rectangle(int x, int y, int width, int height)
        {
            X = x;
            Y = y;
            Width = width;
            Height = height;
        }

//Властивості полів прямокутника
        public int X { get; set; }

        public int Y { get; set; }

        public int Width
        {
            get { return _width; }
            set
            {
                if (value <= 0)
                {
                    throw new InvalidOperationException("Width must be > 0 ");
                }
                _width = value;
            }
        }

        public int Height
        {
            get { return _height; }
            set
            {
                if (value <= 0)
                { 
                    throw new InvalidOperationException("Height must be > 0");
                }
                _height = value;
            }
        }

        public int Right
        {
            get { return X + Width - 1; }
        }

        public int Bottom
        {
            get { return Y + Height - 1; }
        }

// Порівняння характеристик  прямокутника з вхідним прямокутником (кораблем), на можливість переставленння корабля на інше місце 
        public bool Include(Rectangle rect)
        {
            return X <= rect.X && Y <= rect.Y && Right >= rect.Right && Bottom >= rect.Bottom;
        }

//                                                                            на можливість малювання та перемальовки кораблів, стрільби
//                                                                            за координатами поля 10х10
        public bool Include(Point point)
        {
            return point.X >= X && point.X <= Right && point.Y >= Y && point.Y <= Bottom;
        }

        public bool CrossWith(Rectangle rect)
        {
            return !( X > rect.Right || Right < rect.X || Y > rect.Bottom || Bottom < rect.Y );
        }

// Діставання списку координат корабля
        public IList<Point> PointsOf()
        {
            var points = new List<Point>();

            for (var x = X; x <= Right; x++)
            {
                for (var y = Y; y <= Bottom; y++)
                {
                    points.Add(new Point(x, y));
                }
            }

            return points;
        }
    }
}